/**
 * 
 */
package sismed.dados.hibernate.dao;

import java.util.List;

import org.hibernate.Session;

import sismed.dao.IDAOPessoa;
import sismed.hibernate.util.HibernateUtil;
import sismed.negocio.modelo.AnalistaSistema;
import sismed.negocio.modelo.Enfermeiro;
import sismed.negocio.modelo.Farmaceutico;
import sismed.negocio.modelo.Medico;
import sismed.negocio.modelo.Paciente;
import sismed.negocio.modelo.Pessoa;

/**
 * @author Berg
 *
 **/
public class DAOHibernatePessoa implements IDAOPessoa {

	private Session session;
	/**
	 * 
	 */
	public DAOHibernatePessoa() {
		super();
		this.session = HibernateUtil.getSession();
	}

	/* (non-Javadoc)
	 * @see sismed.dao.IDAOPessoa#alterarSenha(java.lang.String, java.lang.String, java.lang.String)
	 */
	public boolean alterarSenha(String id, String senhaAtual, String senhaNova) {
		//int Id = Integer.parseInt(id);
		//Pessoa p = (Pessoa) this.session.load(Pessoa.class, Id);
		Pessoa p = (Pessoa) this.session.createQuery("from Pessoa where id="+id+" and senha='"+senhaAtual+"'").uniqueResult();
		p.setSenha(senhaNova);
		this.session.beginTransaction();
		this.session.saveOrUpdate(p);
		this.session.getTransaction().commit();
		return true;
	}

	/* (non-Javadoc)
	 * @see sismed.dao.IDAOPessoa#buscar(java.lang.String)
	 */
	public Pessoa buscar(String cpf) {
		return (Pessoa)this.session.createQuery("from Pessoa where cpf='"+cpf+"'").uniqueResult();
	}

	/* (non-Javadoc)
	 * @see sismed.dao.IDAOPessoa#cadastrar(sismed.negocio.modelo.Pessoa)
	 */
	public boolean cadastrar(Pessoa pessoa){
		this.session.beginTransaction();
		this.session.save(pessoa);
		this.session.getTransaction().commit();
		return true;
	}

	/* (non-Javadoc)
	 * @see sismed.dao.IDAOPessoa#editar(sismed.negocio.modelo.Pessoa)
	 */
	public boolean editar(Pessoa pessoa) {
		this.session.beginTransaction();
		this.session.update(pessoa);
		this.session.getTransaction().commit();
		return true;
	}

	/* (non-Javadoc)
	 * @see sismed.dao.IDAOPessoa#login(java.lang.String, java.lang.String)
	 */
	public Pessoa login(String login, String senha) {
		Pessoa pe = (Pessoa) this.session.createQuery("from Pessoa where login='"+login+"' and senha='"+senha+"'").uniqueResult();
		return pe;
		
	}

	/* (non-Javadoc)
	 * @see sismed.dao.IDAOPessoa#recuperarListaPacientes()
	 */
	@SuppressWarnings("unchecked")
	public List<Paciente> recuperarListaPacientes() {
		//this.session.createQuery("from Paciente").list();
		return this.session.createCriteria(Paciente.class).list();
	}

	/* (non-Javadoc)
	 * @see sismed.dao.IDAOPessoa#recuperarListaPessoas()
	 */
	@SuppressWarnings("unchecked")
	public List<Pessoa> recuperarListaPessoas() {
		return this.session.createCriteria(Pessoa.class).list();
		 
		//return this.session.createQuery("from sismed.negocio.modelo.Pessoa").list();
	}

	/* (non-Javadoc)
	 * @see sismed.dao.IDAOPessoa#recuperarPessoa(java.lang.String)
	 */
	public Pessoa recuperarPessoa(int idPessoa) {
		int Id = idPessoa;//Integer.parseInt(idPessoa);
		return (Pessoa) this.session.load(Pessoa.class, Id);
	}

	public boolean excluir(int idPessoa) {
		Pessoa p = recuperarPessoa(idPessoa);
		this.session.beginTransaction();
		this.session.delete(p);
		this.session.getTransaction().commit();
		return true;
	}

	@SuppressWarnings("unchecked")
	public List<Enfermeiro> recuperarListaEnfermeiros() {
		List<Enfermeiro> e = this.session.createQuery("from Enfermeiro").list();
		return e;
	}

	@SuppressWarnings("unchecked")
	public List<Farmaceutico> recuperarListaFarmaceuticos() {
		List<Farmaceutico> f = this.session.createQuery("from Farmaceutico").list();
		return f;
	}

	
	@SuppressWarnings("unchecked")
	public List<Medico> recuperarListaMedicos() {
		List<Medico> m = this.session.createQuery("from Medico").list();
		return m;
	}

	public boolean atualizarPessoa(Pessoa pessoa, String id) {
		// TODO Auto-generated method stub
		this.session.beginTransaction();
		this.session.update(pessoa);
		this.session.getTransaction().commit();
		return true;
	}

	public AnalistaSistema recuperarAnalista(int idAnalista) {
		// TODO Auto-generated method stub
		return (AnalistaSistema) this.session.load(AnalistaSistema.class, idAnalista);
	}

	public Enfermeiro recuperarEnfermeiro(int idEnfermeiro) {
		// TODO Auto-generated method stub
		return (Enfermeiro) this.session.load(Enfermeiro.class, idEnfermeiro);
	}

	public Farmaceutico recuperarFarmaceutico(int idFarmaceutico) {
		// TODO Auto-generated method stub
		return (Farmaceutico) this.session.load(Farmaceutico.class, idFarmaceutico);
	}

	public Medico recuperarMedico(int idMedico) {
		// TODO Auto-generated method stub
		return (Medico) this.session.load(Medico.class, idMedico);
	}

	public Paciente recuperarPaciente(int idPaciente) {
		// TODO Auto-generated method stub
		return (Paciente) this.session.load(Paciente.class, idPaciente);
	}

	@SuppressWarnings("unchecked")
	public List<Paciente> recuperarListaPacientesInternados() {
		// TODO Auto-generated method stub
		return this.session.createQuery("from Paciente where internado=1").list();
	}

	@SuppressWarnings("unchecked")
	public List<Paciente> recuperarListaPacientesNaoInternados() {
		// TODO Auto-generated method stub
		return this.session.createQuery("from Paciente where internado=0").list();
	}

}
